import pandas as pd
import time
class BankSys:
    def __init__(self):
        self.user_infos = pd.read_table('data/银行用户信息.txt', header=None, sep=',', encoding='utf-8')
        keyList = list(range(9))
        self.headlist = ['编号', '姓名', '性别', '身高', '出生日期', '户籍', '开户地区', '开卡时间', '余额']
        headDict = dict(zip(keyList, self.headlist))  # 将两个列表组合成字典
        # 换头
        self.user_infos.reset_index()
        self.user_infos.rename(columns=headDict, inplace=True)
        while(True):
            self.menu()
            choice=input("请输入您的选择")
            self.process_choice(choice)
    def menu(self):
        content = '''
         *********************************
         ** 欢迎使用银行用户管理系统     **
         ** 1.查看全部用户               **
         ** 2.新增用户                   **
         ** 3.按编号删除用户             **
         ** 4.充值                       **
         ** 5.搜索用户                   **
         ** 0.退出系统                   **
         **********************************  
        '''
        print(content)

    def process_choice(self,choice):
        self.switcher={ '1':'list_users','2':'add_user','3': 'del_user','4': 'charge','0':'exit'}#准备一个字典用 选项对应方法名
        item =  self.switcher.get(choice,'请输入正确的选项') #字典 输入正确的key 得到对应值
        f = getattr(self,item) #使用系统提供的函数getattr 传入两个参 1个调用函数的对象 2函数名  得到返回值让f保存，保存函数对象
        f() #让函数调用
    def list_users(self):
        print(self.user_infos)
    def add_user(self):
        no  = input("请输入用户编号")
        name = input("请输入用户姓名")
        sex = input("请输入性别")
        high = input("请输入身高")
        birthday = input("请输入出生日期")
        area1 = input("请输入户籍")
        area2 = input("请输入开户地区")
        startTime = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
        cost = 0

        # user_dict = {'姓名':no, '姓名':name, '性别':sex, '身高':high, '出生日期':birthday, '户籍':area1,
        #              '开户地区':area2, '开卡时间':startTime, '余额':cost} #直接拼字典不推荐 因为要同步修改多个字段名
        user_value_list =  [no,name,sex,high,birthday,area1,area2,startTime,cost]
        self.user_infos.loc[len(self.user_infos.index)+1] = user_value_list #将新值的列表添加到原dataframe最后一行之后
        self.user_infos.to_csv('data/银行用户信息.txt',header=None,index=None)
    def del_user(self):
        no=input('请输入要删除的用户的编号')
        user_info_cover = [int(user_info) != int(no) for user_info in self.user_infos['编号']]
        print(user_info_cover)
        temp_user_infos = self.user_infos #将没有遮罩的数据额外保存一份
        self.user_infos = self.user_infos[user_info_cover] #得到遮罩后的数据
        user_info_cover_no = len([cover==False for cover in user_info_cover])
        if user_info_cover_no <=0: #如果没有数据要删除，将额外保存的数据再保存回来
           print('要删除的不存在')
        else:
           print(self.user_infos)
           self.user_infos.to_csv('data/银行用户信息.txt', header=None, index=None)

    def charge(self):
       no = input('请输入要修改用户的编号')
       money = input('请输入要充值的费用')
       oldMoney = self.user_infos.loc[self.user_infos['编号']==int(no),'余额'].tolist()[0]
       '''
       self.user_infos['编号']==int(no) 是水平切片的条件 就是选取行 编号等于输入的no，后面的 '余额'是列的切片因为切片后得到数据类型
       是series 包含标题需要转换为list，然后取[0]就是第一个      
       '''
       newmoney = oldMoney + int(money)
       self.user_infos.loc[self.user_infos['编号']==int(no),'余额']=2000
       '''
       切片后直接赋值 
       '''
       print(self.user_infos)

bankSys=BankSys()